When developing a software product, the code base for the product can be extensive. As such, building, testing, and validating a product can be very time-consuming, challenging, and can require tremendous hardware resources. When performing a build, developers need access to a range of machine power, from basic desktop power to high-end, server-class machines. However, the power required by a given developer is not constant over time, with the developer needing more power at some times and less power at other times.
In addition, when developing a software product, the code base can be very large with a tremendous number of interdependencies between parts of the code. Various parts of the code may be dependent on other parts of the code, but the code for the various parts may be updated at different times. Backing up such a code base can be difficult and unwieldy.